#ifndef __WIZ_UTILS_MD5_HPP__SHANHAOBO_19800429__
#define __WIZ_UTILS_MD5_HPP__SHANHAOBO_19800429__

#include "../Base/Type/WizBaseType.hpp"

namespace Wiz
{
    namespace MD5
    {
        //////////////////////////////////////////////////////////////////////////

        WIZ_EXPORT ::Wiz::Void::Type Generate(::Wiz::UInt8::Type OutMD5[16], ::Wiz::Byte::Ptr DataPtr, ::Wiz::Size::In DataSZ);

        //////////////////////////////////////////////////////////////////////////

        class WIZ_EXPORT Type 
        { 
        private:
            WIZ_DECLARE_CLASS_THIS(Type);
        public:
            ::Wiz::Void::Type Generate(::Wiz::Byte::Ptr DataPtr, ::Wiz::Size::In DataSZ)
            {
                ::Wiz::MD5::Generate(m_Data, DataPtr, DataSZ);
            }
            ::Wiz::Void::Type Generate(::Wiz::Char::Ptr Str)
            {
                ::Wiz::MD5::Generate(m_Data, reinterpret_cast<::Wiz::Byte::Ptr>(Str), ::strlen(Str));
            }

        public:
            Type(); 
            Type(::Wiz::Char::ConstPtr); 
            Type(::Wiz::UInt8::Ptr);

        public:
            tThis operator+(tThisIn);
            ::Wiz::Bool::Type operator==(tThisIn);

        public:
            ::Wiz::String::Type ToString();

        protected:
            ::Wiz::UInt8::Type m_Data[16];
        };
        WIZ_DECLARE(::Wiz::MD5::Type);
    } /// end of namespace MD5
} /// end of namespace Wiz

#endif /*__WIZ_UTILS_MD5_HPP__SHANHAOBO_19800429__*/
